package telas;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;
import java.text.ParseException;

import cliente.Cliente;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


/**
 * This code was edited or generated using CloudGarden's Jigloo
 * SWT/Swing GUI Builder, which is free for non-commercial
 * use. If Jigloo is being used commercially (ie, by a corporation,
 * company or business for any purpose whatever) then you
 * should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details.
 * Use of Jigloo implies acceptance of these licensing terms.
 * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
 * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
 * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class tela_login extends javax.swing.JFrame {
	private JLabel label_entrar_chat;
	private JLabel usuario_label;
	private JTextField latitude_textfield;
	private JButton cancelar_botao;
	private JButton entrar_botao;
	private JComboBox status_combobox;
	private JTextField longitude_textfield;
	private JButton increvase_botao;
	private JLabel nao_possui_cadastro_label;
	private JPasswordField senha_textfield;
	private JTextField usuario_textfield;
	private JLabel status_label;
	private JLabel longitude_label;
	private JLabel latitude_label;
	private JLabel senha_label;
	private String[] args;

	/**
	 * Auto-generated main method to display this JFrame
	 */
	/*
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				tela_login inst = new tela_login();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	 */

	public tela_login(String[] args) {

		super();
		this.args = args;
		initGUI();
	}

	private void initGUI() {
		try {
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
			addWindowListener(new WindowAdapter()  
			{  
				public void windowClosing (WindowEvent e) {  
					//caixa de dialogo retorna um inteiro  
					int resposta = JOptionPane.showConfirmDialog(null,"Tem certeza que deseja finalizar?","Finalizar",JOptionPane.YES_NO_OPTION);  

					//sim = 0, nao = 1  
					if (resposta == 0) {  
						System.exit(0);  
					}  
				}  
			});
			{
				increvase_botao = new JButton();
				getContentPane().add(increvase_botao, new AnchorConstraint(891, 805, 979, 524, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				increvase_botao.setText("Inscreva-se");
				increvase_botao.setPreferredSize(new java.awt.Dimension(108, 23));
				//Evento que trata abrir tela de cadastro
				increvase_botao.addActionListener(new java.awt.event.ActionListener() {  
					public void actionPerformed(java.awt.event.ActionEvent evt) {
						//Método que abre a nova nova tela 
						botaoEntrarNoCadastro(evt);  
					}
				});

			}
			{
				nao_possui_cadastro_label = new JLabel();
				getContentPane().add(nao_possui_cadastro_label, new AnchorConstraint(902, 506, 963, 160, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				nao_possui_cadastro_label.setText("Não possui cadastro?");
				nao_possui_cadastro_label.setPreferredSize(new java.awt.Dimension(133, 16));
			}
			{
				cancelar_botao = new JButton();
				getContentPane().add(cancelar_botao, new AnchorConstraint(769, 782, 856, 540, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				cancelar_botao.setText("Sair");
				cancelar_botao.setPreferredSize(new java.awt.Dimension(93, 23));
				cancelar_botao.addActionListener(new java.awt.event.ActionListener() {  
					public void actionPerformed(java.awt.event.ActionEvent evt) {
						System.exit(0);
					}
				});
			}
			{
				entrar_botao = new JButton();
				getContentPane().add(entrar_botao, new AnchorConstraint(765, 470, 853, 233, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				entrar_botao.setText("Entrar");
				entrar_botao.setPreferredSize(new java.awt.Dimension(91, 23));
				entrar_botao.addActionListener(new java.awt.event.ActionListener() {  
					public void actionPerformed(java.awt.event.ActionEvent evt) {
						//Método que trata o evento após click em entrar
						botaoEntrarNoMesseger(evt);  
					}
				});
			}
			{
				ComboBoxModel status_comboboxModel = 
						new DefaultComboBoxModel(
								new String[] { "online", "ocupado", "ausente", "offline" });
				status_combobox = new JComboBox();
				getContentPane().add(status_combobox, new AnchorConstraint(627, 636, 715, 285, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				//Status do usuário
				status_combobox.setModel(status_comboboxModel);
				status_combobox.setPreferredSize(new java.awt.Dimension(135, 23));
			}
			{
				//Campo que irá conter a longitude
				longitude_textfield = new JTextField();
				getContentPane().add(longitude_textfield, new AnchorConstraint(509, 636, 597, 285, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				longitude_textfield.setPreferredSize(new java.awt.Dimension(135, 23));
			}
			{
				//Campo que irá conter a latitude
				latitude_textfield = new JTextField();
				getContentPane().add(latitude_textfield, new AnchorConstraint(383, 636, 471, 285, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				latitude_textfield.setPreferredSize(new java.awt.Dimension(135, 23));
			}
			{
				//Campo que contém a senha do usuário
				senha_textfield = new JPasswordField();
				getContentPane().add(senha_textfield, new AnchorConstraint(253, 764, 341, 285, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				senha_textfield.setPreferredSize(new java.awt.Dimension(184, 23));
			}
			{
				//Campo que contém o nome do usuário
				usuario_textfield = new JTextField();
				getContentPane().add(usuario_textfield, new AnchorConstraint(143, 764, 230, 285, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				usuario_textfield.setPreferredSize(new java.awt.Dimension(184, 23));
			}
			{
				status_label = new JLabel();
				getContentPane().add(status_label, new AnchorConstraint(639, 266, 700, 74, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				status_label.setText("Status:");
				status_label.setPreferredSize(new java.awt.Dimension(74, 16));
			}
			{
				longitude_label = new JLabel();
				getContentPane().add(longitude_label, new AnchorConstraint(520, 266, 582, 74, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				longitude_label.setText("Longitude:");
				longitude_label.setPreferredSize(new java.awt.Dimension(74, 16));
			}
			{
				latitude_label = new JLabel();
				getContentPane().add(latitude_label, new AnchorConstraint(395, 266, 456, 74, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				latitude_label.setText("Latitude:");
				latitude_label.setPreferredSize(new java.awt.Dimension(74, 16));
			}
			{
				senha_label = new JLabel();
				getContentPane().add(senha_label, new AnchorConstraint(265, 266, 326, 74, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				senha_label.setText("Senha:");
				senha_label.setPreferredSize(new java.awt.Dimension(74, 16));
			}
			{
				usuario_label = new JLabel();
				getContentPane().add(usuario_label, new AnchorConstraint(154, 266, 215, 74, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				usuario_label.setText("Usuário:");
				usuario_label.setPreferredSize(new java.awt.Dimension(74, 16));
			}
			{
				label_entrar_chat = new JLabel();
				getContentPane().add(label_entrar_chat, new AnchorConstraint(40, 657, 101, 391, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				label_entrar_chat.setText("Entrar no Chat");
				label_entrar_chat.setPreferredSize(new java.awt.Dimension(102, 16));
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			//add your error handling code here
			e.printStackTrace();
		}
	}

	//Método que trata o login do cliente
	public void botaoEntrarNoMesseger(ActionEvent evt) {

		//System.out.println(longitude_textfield.getText());
		//Trata o nome do usuário só conter letras (validação do nome usuário)
		if( usuario_textfield.getText().matches("[a-zA-Z]+") == false ) {
			JOptionPane.showMessageDialog(null, "Nome de usuário só deve conter letras e sem acento! (Campo também não pode estar vazio!)", "Nome de Usuário", JOptionPane.ERROR_MESSAGE); 
		}//Validação da senha 
		else if( new String(senha_textfield.getPassword()).matches("[a-zA-Z0-9]+") == false ) {
			JOptionPane.showMessageDialog(null, "Senha deve conter somente letras(sem acento) e números! (Campo também não pode estar vazio!)", "Nome de Usuário", JOptionPane.ERROR_MESSAGE);
		} //Validação da latitude
		else if( isDouble(latitude_textfield.getText()) == false) {
			JOptionPane.showMessageDialog(null, "Campo Latitude deve ser um número (double)! (Use ponto em vez de vírgula) (Campo também não pode estar vazio!)", "Latitude", JOptionPane.ERROR_MESSAGE);
		}//Validação da longitude 
		else if(isDouble(longitude_textfield.getText()) == false) {
			JOptionPane.showMessageDialog(null, "Campo Longitude deve ser um número (double)! (Use ponto em vez de vírgula) (Campo também não pode estar vazio!)", "Longitude", JOptionPane.ERROR_MESSAGE);
		}  else {
			//Se todas as validações estão ok 

			//Cria o cliente
			Cliente cliente = new Cliente( this.args, null, usuario_textfield.getText(), new String(senha_textfield.getPassword()), Double.parseDouble(latitude_textfield.getText()), Double.parseDouble(longitude_textfield.getText()), false, status_combobox.getSelectedItem().toString(),null);
			
			boolean cadastrado = cliente.fazLoginCliente();
			if(cadastrado){
				//Fecha a tela atual
				this.dispose(); 

				//Cria uma tela principal
				tela_principal inst = new tela_principal(this.args, cliente);
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
			
			
			

		}

	}

	//Criar a tela de cadastro
	public void botaoEntrarNoCadastro(ActionEvent evt) {
		//Fecha a tela atual para abrir a de cadastro
		this.dispose(); 

		//SwingUtilities.invokeLater(new Runnable() {
		//	public void run() {

		//Cria a tela de cadastro
		tela_cadastro inst = new tela_cadastro(args);
		//Centraliza a tela
		inst.setLocationRelativeTo(null);
		inst.setVisible(true);
		//	}
		//});

	}

	//Verifica se é double
	public boolean isDouble (String s) {  
		try {  
			Double.parseDouble (s);   
			return true;  
		} catch (NumberFormatException ex) {  
			return false;  
		}  
	} 

}
